//
// Created by 花如锦 on 2024/5/12.
//

#ifndef DEMO20240512_TESTCLION_POINTERREF_H
#define DEMO20240512_TESTCLION_POINTERREF_H

#endif //DEMO20240512_TESTCLION_POINTERREF_H

#include "map"

using namespace std;

class PointerRef {

public:
    /**
     * 获取 实例
     * @return
     */
    static PointerRef* GetInstance();

    /**
     * 获取 引用计数
     * @param Pointer 地址
     * @return 数量
     */
    static int GetRefCount(void* Pointer);

    /**
     * 添加引用计数
     * @param Pointer 地址
     * @return 当前 指针 总引用计数
     */
    static int AddRef(void* Pointer);

    /**
     * 减少引用计数
     * @param Pointer 地址
     * @return 当前 指针 总引用计数
     */
    static int DelRef(void* Pointer);

private:
    PointerRef() {};
    static PointerRef* Ref;
    static map<void*, int> RefCount;
};